我們有個功能是希望讓一段文本是被不同的方式介紹,像是 podcast 採訪的形式,最好可以根據用戶選擇的風格和語言來選擇,這邊可以介紹的是
Example selectors
先定義兩種情境可能的值
age_groups = ["兒童", "青少年", "成人", "老年"]
personalities = ["活潑", "幽默", "學術", "懷舊"]
再來善用昨天的 few_shot,讓他更符合我們想要的情境
examples = [
{
"age_group": "兒童",
"guide_personality": "活潑",
"text": "嗨,小朋友們!準備好踏上一段神奇的冒險了嗎?我們今天要去探索一個超級酷的地方,叫做大稻埕!這裡有好多好多有趣的東西哦!你們看,那邊有一棟棟漂亮的房子,有的看起來像城堡,有的像是從很久很久以前來的。我們可以玩個遊戲,看誰能找到最多不同的房子樣式!還有,你們聞到了嗎?那是好吃的小吃的味道,我們等一下可以去嚐嚐看哦!"
},
{
"age_group": "兒童",
"guide_personality": "懷舊",
"text": "小朋友們,我們今天要一起穿越時光,回到爺爺奶奶小時候的大稻埕!你們看,這些老房子就像是從故事書裡走出來的一樣。想像一下,很久很久以前,這裡的小朋友們就在這些街道上玩耍。我們可以假裝自己是古代的小販,賣賣茶葉或布料。還有,聞聞這香味,是古早味的點心哦!我們一起來體驗一下以前的生活,好像在玩扮家家酒一樣有趣!"
},
{
"age_group": "老年",
"guide_personality": "活潑",
"text": "各位長輩們,今天我們要來一場充滿活力的大稻埕之旅!別看我們年紀大了,我們的心還是很年輕的!來,我們一起來尋找您年輕時的回憶。看到那些漂亮的巴洛克建築了嗎?我們來猜猜看,以前這裡是做什麼用的。哦,那邊有家老茶行,我們來比賽聞茶葉,看誰的鼻子最靈!等一下我們還要去品嚐一下當地的美食,保證會讓您回味無窮!準備好了嗎?讓我們一起重拾年輕時的活力,度過一個歡樂的下午!"
},
{
"age_group": "老年",
"guide_personality": "懷舊",
"text": "親愛的長輩們,歡迎來到大稻埕,這個充滿回憶的地方。走在這些古老的街道上,是不是讓您想起了過去的歲月?看,那邊的巴洛克式建築,還記得當年它有多麼氣派嗎?再看看這些傳統的閩南平房,多像我們小時候住的房子啊。還有這些紅磚洋樓,想必讓您想起了年輕時的繁華景象。我們可以慢慢走,細細品味每一處風景。來,我們去那家老茶行坐坐,喝杯好茶,聊聊往事。這裡的一磚一瓦,都訴說著我們共同的回憶。"
}
]
我們使用 SemanticSimilarityExampleSelector 來抓取最相關的
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=2 # 選擇兩個最相關的例子
)
為 prompt template 定義模板
few_shot_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="""你是一位專業的導遊,正在為遊客介紹大稻埕。請根據遊客的年齡組別和指定的導遊風格,創作一段生動有趣的大稻埕介紹。介紹應包含以下要點,但要根據年齡組別和導遊風格來調整表達方式:
1. 大稻埕的建築特色(巴洛克式建築、閩南平房、紅磚洋樓)
2. 傳統行業(茶行、布行、中藥材行)
3. 當地美食
4. 歷史文化底蘊
5. 新舊交融的特色
以下是大稻埕的基本信息:
大稻埕擁有華麗的巴洛克式建築、傳統的閩南平房、明亮的紅磚洋樓,不論是古蹟建築、傳統民俗、茶行、布行、中藥材行、在地美食等,到處都有舊城的歷史軌跡。在這歷史悠久的古老街區中,擁有深厚歷史傳承的百年老舖與創意街區,打造出大稻埕新生活美學。
請根據指定的年齡組別和導遊風格創作,使內容既適合目標年齡群,又體現指定的導遊風格。即使是不常見的組合(如懷舊風格的兒童導覽或活潑風格的老年人導覽),也請創造性地完成任務。以下是一些示例:""",
suffix="Age Group: {age_group}\nGuide Personality: {guide_personality}\n\nIntroduction:",
input_variables=["age_group", "guide_personality"]
)